package com.ruoyi.system.service;

import com.ruoyi.system.dto.AcceptanceChecklistSubmitDTO;
import com.ruoyi.system.vo.AcceptanceChecklistInstanceVO;

import java.util.List;

/**
 * 验收单实例服务接口
 * 
 * @author ruoyi
 * @since 2024-01-01
 */
public interface AcceptanceChecklistInstanceService {

    /**
     * 创建验收单实例
     * 
     * @param templateId 模板ID
     * @param projectId 项目ID
     * @param stageId 阶段ID
     * @param h5UserId H5用户ID
     * @param h5UserName H5用户姓名
     * @param msgTaskId 消息任务ID
     * @param msgItemId 消息子项ID
     * @return 实例ID
     */
    Long createInstance(Long templateId, Long projectId, Long stageId, Long h5UserId, String h5UserName, Long msgTaskId, Long msgItemId);

    /**
     * 获取验收单实例详情
     * 
     * @param instanceId 实例ID
     * @return 实例详情
     */
    AcceptanceChecklistInstanceVO getInstanceDetail(Long instanceId);

    /**
     * 根据消息子项ID获取验收单实例
     * 
     * @param msgItemId 消息子项ID
     * @return 实例详情
     */
    AcceptanceChecklistInstanceVO getInstanceByMsgItemId(Long msgItemId);

    /**
     * 提交验收单
     * 
     * @param submitDTO 提交参数
     * @return 提交结果
     */
    Boolean submitChecklist(AcceptanceChecklistSubmitDTO submitDTO);

    /**
     * 根据H5用户ID获取验收单实例列表
     * 
     * @param h5UserId H5用户ID
     * @param status 状态过滤
     * @return 实例列表
     */
    List<AcceptanceChecklistInstanceVO> getInstancesByH5UserId(Long h5UserId, String status);

    /**
     * 根据项目和阶段获取验收单实例列表
     * 
     * @param projectId 项目ID
     * @param stageId 阶段ID
     * @return 实例列表
     */
    List<AcceptanceChecklistInstanceVO> getInstancesByProjectStage(Long projectId, Long stageId);
}

